package com.ruoyi.pack.service;

import com.ruoyi.pack.dto.LocationUploadRequest;
import com.ruoyi.pack.dto.LocationInfo;
import java.math.BigDecimal;

/**
 * 位置处理服务接口
 * 
 * @author ruoyi
 * @date 2024-01-01
 */
public interface ILocationProcessingService {

    /**
     * 处理定位器位置信息上传
     * 
     * @param request 位置上传请求
     * @return 处理结果
     */
    boolean processLocationUpload(LocationUploadRequest request);

    /**
     * 根据坐标获取地理位置信息
     * 
     * @param longitude 经度
     * @param latitude 纬度
     * @return 地理位置信息
     */
    LocationInfo getLocationInfo(BigDecimal longitude, BigDecimal latitude);

    /**
     * 计算两点之间的距离（公里）
     * 
     * @param lng1 点1经度
     * @param lat1 点1纬度
     * @param lng2 点2经度
     * @param lat2 点2纬度
     * @return 距离（公里）
     */
    double calculateDistance(BigDecimal lng1, BigDecimal lat1, BigDecimal lng2, BigDecimal lat2);

    /**
     * 获取历史平均运输时间
     * 
     * @param fromCity 起始城市
     * @param toCity 目标城市
     * @return 平均运输小时数，null表示无历史数据
     */
    Double getAverageTransportTime(String fromCity, String toCity);

    /**
     * 发送延迟预警
     * 
     * @param wayBillId 运单ID
     * @param delayHours 延迟小时数
     */
    void sendDelayAlert(String wayBillId, int delayHours);

    /**
     * 发送到达通知
     * 
     * @param wayBillId 运单ID
     */
    void sendArrivalNotification(String wayBillId);
} 